﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PersonalAccounting.Business;

namespace PersonalAccounting.Forms
{
    public partial class FormMonedaManagement : Form
    {

        #region Atributtes

        private MonedaFacade facade;
        private Moneda moneda;
        private ListViewItem item;

        #endregion


        #region Form

        public FormMonedaManagement()
        {
            facade = new MonedaFacade();
            moneda = new Moneda();

            InitializeComponent();
        }

        private void FormMonedaManagement_Load(object sender, EventArgs e)
        {
            CargarMonedas();
        }

        #endregion


        #region Click

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (DatosOk())
                Agregar();
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (DatosOk())
                Modificar();
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            string mensaje = "¿Desea eliminar la moneda?\n" +
                        "Se eliminarán todas las cuentas y movimientos expresados en dicha moneda.";
            DialogResult dr = MessageBox.Show(mensaje, this.Text, 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dr == DialogResult.Yes)
                Eliminar();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        #region SelectedIndexChanged

        private void lvMonedas_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvMonedas.SelectedItems.Count > 0)
            {
                item = lvMonedas.SelectedItems[0];
                MostrarMoneda();
            }
            else
            {
                item = null;
                LimpiarMoneda();
            }
            txtNombre.Focus();
        }

        #endregion



        private bool DatosOk()
        {
            if (txtNombre.Text.Length == 0)
            {
                MessageBox.Show("Debe indicar un nombre.", this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtNombre.Focus();
                return false;
            }
            if (txtSimbolo.Text.Length == 0)
            {
                MessageBox.Show("Debe indicar un símbolo.", this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtSimbolo.Focus();
                return false;
            }
            return true;
        }


        private void Agregar()
        {
            moneda.Codigo = facade.GetNextCode();
            moneda.Nombre = txtNombre.Text;
            moneda.Simbolo = txtSimbolo.Text;

            facade.Insert(moneda);

            LimpiarMoneda();
            CargarMonedas();
            lvMonedas.Focus();
        }

        private void Modificar()
        {
            moneda.Codigo = int.Parse(txtCodigo.Text);
            moneda.Nombre = txtNombre.Text;
            moneda.Simbolo = txtSimbolo.Text;

            facade.Update(moneda);

            LimpiarMoneda();
            CargarMonedas();
            lvMonedas.Focus();
        }

        private void Eliminar()
        {
            moneda.Codigo = int.Parse(txtCodigo.Text);

            facade.Delete(moneda);

            LimpiarMoneda();
            CargarMonedas();
            lvMonedas.Focus();
        }


        private void CargarMonedas()
        {
            MonedaFacade facade = new MonedaFacade();

            lvMonedas.Items.Clear();
            foreach (Moneda moneda in facade.GetAll())
            {
                ListViewItem item = lvMonedas.Items.Add(moneda.Codigo.ToString());

                item.SubItems.Add(moneda.Nombre);
                item.SubItems.Add(moneda.Simbolo);

                if (item.Index % 2 != 0)
                    item.BackColor = Color.WhiteSmoke;
            }
        }

        private void MostrarMoneda()
        {
            txtCodigo.Text = item.Text;
            txtNombre.Text = item.SubItems[1].Text;
            txtSimbolo.Text = item.SubItems[2].Text;

            btnAgregar.Visible = false;
            btnModificar.Visible = true;
            btnEliminar.Visible = true;
        }

        private void LimpiarMoneda()
        {
            txtCodigo.Clear();
            txtNombre.Clear();
            txtSimbolo.Clear();

            btnAgregar.Visible = true;
            btnModificar.Visible = false;
            btnEliminar.Visible = false;
        }

    }
}